package br.com.saeng2D.objeto.forca;

import java.awt.Graphics2D;

import br.com.saeng2D.objeto.AbstratoObjeto;
import br.com.saeng2D.objeto.animado.Associacao;
import br.com.saeng2D.objeto.animado.VetorAnimado;
import br.com.saeng2D.util.Util;

public class ForcaTriangular extends AbstratoForca {
	
	public ForcaTriangular(int x, int y) {
		super("forca_triangular", x, y);
		inicializacao();
		this.corFundo = Util.getCor("cor_forca_triangular");
	}

	public void inicializacao() {
		vetores = new VetorAnimado[27];
		vetores[0]  = new VetorAnimado( 24.0f,  -4.0f, false, false);
		vetores[1]  = new VetorAnimado( 48.0f,  -8.0f, false, false);
		vetores[2]  = new VetorAnimado( 72.0f, -12.0f, false, false);
		vetores[3]  = new VetorAnimado(-24.0f,   4.0f, false, false);
		vetores[4]  = new VetorAnimado(-48.0f,   8.0f, false, false);
		vetores[5]  = new VetorAnimado(-72.0f,  12.0f, false, false);
		vetores[6]  = new VetorAnimado( 72.0f,  32.0f, false, false);
		vetores[7]  = new VetorAnimado( 48.0f,  32.0f, false, false);
		vetores[8]  = new VetorAnimado( 24.0f,  32.0f, false, false);
		vetores[9]  = new VetorAnimado(  0.0f,  32.0f,  true,  true);
		vetores[10] = new VetorAnimado(-24.0f,  32.0f, false, false);
		vetores[11] = new VetorAnimado(-48.0f,  32.0f, false, false);
		vetores[12] = new VetorAnimado(-72.0f,  32.0f, false, false);
		vetores[13] = new VetorAnimado( 80.0f,  24.0f, false, false);
		vetores[14] = new VetorAnimado( 64.0f,  24.0f, false, false);
		vetores[15] = new VetorAnimado( 56.0f,  24.0f, false, false);
		vetores[16] = new VetorAnimado( 40.0f,  24.0f, false, false);
		vetores[17] = new VetorAnimado( 32.0f,  24.0f, false, false);
		vetores[18] = new VetorAnimado( 16.0f,  24.0f, false, false);
		vetores[19] = new VetorAnimado(  8.0f,  24.0f, false, false);
		vetores[20] = new VetorAnimado( -8.0f,  24.0f, false, false);
		vetores[21] = new VetorAnimado(-16.0f,  24.0f, false, false);
		vetores[22] = new VetorAnimado(-32.0f,  24.0f, false, false);
		vetores[23] = new VetorAnimado(-40.0f,  24.0f, false, false);
		vetores[24] = new VetorAnimado(-56.0f,  24.0f, false, false);
		vetores[25] = new VetorAnimado(-64.0f,  24.0f, false, false);
		vetores[26] = new VetorAnimado(-80.0f,  24.0f, false, false);

		vetorReferencia = vetores[9];

		associacoes = new Associacao[21];
		associacoes[0]  = new Associacao(vetores[5], vetores[2]);
		associacoes[1]  = new Associacao(vetores[2], vetores[6]);
		associacoes[2]  = new Associacao(vetores[1], vetores[7]);
		associacoes[3]  = new Associacao(vetores[0], vetores[8]);
		associacoes[4]  = new Associacao(vetores[3], vetores[10]);
		associacoes[5]  = new Associacao(vetores[4], vetores[11]);
		associacoes[6]  = new Associacao(vetores[5], vetores[12]);
		associacoes[7]  = new Associacao(vetores[13], vetores[6]);
		associacoes[8]  = new Associacao(vetores[14], vetores[6]);
		associacoes[9]  = new Associacao(vetores[15], vetores[7]);
		associacoes[10] = new Associacao(vetores[16], vetores[7]);
		associacoes[11] = new Associacao(vetores[17], vetores[8]);
		associacoes[12] = new Associacao(vetores[18], vetores[8]);
		associacoes[13] = new Associacao(vetores[19], vetores[9]);
		associacoes[14] = new Associacao(vetores[20], vetores[9]);
		associacoes[15] = new Associacao(vetores[21], vetores[10]);
		associacoes[16] = new Associacao(vetores[22], vetores[10]);
		associacoes[17] = new Associacao(vetores[23], vetores[11]);
		associacoes[18] = new Associacao(vetores[24], vetores[11]);
		associacoes[19] = new Associacao(vetores[25], vetores[12]);
		associacoes[20] = new Associacao(vetores[26], vetores[12]);
	}

	public void reassociar() {
		vetorReferencia = vetores[9];

		associacoes = new Associacao[21];
		associacoes[0]  = new Associacao(vetores[5], vetores[2]);
		associacoes[1]  = new Associacao(vetores[2], vetores[6]);
		associacoes[2]  = new Associacao(vetores[1], vetores[7]);
		associacoes[3]  = new Associacao(vetores[0], vetores[8]);
		associacoes[4]  = new Associacao(vetores[3], vetores[10]);
		associacoes[5]  = new Associacao(vetores[4], vetores[11]);
		associacoes[6]  = new Associacao(vetores[5], vetores[12]);
		associacoes[7]  = new Associacao(vetores[13], vetores[6]);
		associacoes[8]  = new Associacao(vetores[14], vetores[6]);
		associacoes[9]  = new Associacao(vetores[15], vetores[7]);
		associacoes[10] = new Associacao(vetores[16], vetores[7]);
		associacoes[11] = new Associacao(vetores[17], vetores[8]);
		associacoes[12] = new Associacao(vetores[18], vetores[8]);
		associacoes[13] = new Associacao(vetores[19], vetores[9]);
		associacoes[14] = new Associacao(vetores[20], vetores[9]);
		associacoes[15] = new Associacao(vetores[21], vetores[10]);
		associacoes[16] = new Associacao(vetores[22], vetores[10]);
		associacoes[17] = new Associacao(vetores[23], vetores[11]);
		associacoes[18] = new Associacao(vetores[24], vetores[11]);
		associacoes[19] = new Associacao(vetores[25], vetores[12]);
		associacoes[20] = new Associacao(vetores[26], vetores[12]);
	}
	
	public AbstratoObjeto prototipo() {
		ForcaTriangular forca = new ForcaTriangular(x, y);
		forca.vetores = vetores;
		forca.associacoes = associacoes;
		forca.vetorReferencia = vetorReferencia;
		forca.variavelForca = variavelForca;
		return forca;
	}

	public void desenhar(Graphics2D g2) {
		if(!isVisivel()) {
			return;
		}
		g2.setStroke(AbstratoObjeto.LARGURA_LINHA_ABSTRATO_OBJETO);
		if (selecionado) {
			g2.setColor(corSelecionado);
		} else {
			g2.setColor(corFundo);
		}
		for(Associacao a : associacoes) {
			desenhar(g2, a.vetor1, a.vetor2);
		}
		for(VetorAnimado v : vetores) {
			if(v.visivel) {
				desenhar(g2, v);
			}
		}
	}
	
	public void alterarTamanho(int tamanho) {
	}

	public boolean estarSob(int x, int y) {
		// TODO implementar
		return false;
	}

	public boolean ehIgual(AbstratoObjeto objeto) {
		// TODO implementar
		return false;
	}
}